home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 60754 / 60754.xpi / chrome / content / ststimer.js < prev    next >
Text File  |  2010-02-05  |  14KB  |  320 lines

  1. /*
  2. Timer based on:
  3. ***   Time Zone Count Down Javascript   ***
  4. http://rainbow.arch.scriptmania.com/scripts/timezone_countdown.html
  5. */
  6.  
  7. if(!ststimer) var ststimer = {};
  8.  
  9. ststimer = function() {
  10.  
  11.     var today = new Date();
  12.     var launchDate = null;
  13.     var orbitInsertion = null;
  14.     var deorbitIgnition = null;
  15.     var landingDate = null;
  16.     var newCountdownDate = null;
  17.     var missionNumber = null;
  18.     var missionName = null;
  19.     var issAssemblyFlight = null;
  20.     var orbiter = null;
  21.     var nextMissionNumber = null;
  22.     var nextIssAssemblyFlight = null;
  23.     var nextOrbiter = null;
  24.     var panelOpenTime = 0;
  25.  
  26.     function startTimer() {
  27.         displayTimer(setTimer(today), "sb_ststimer");
  28.     }
  29.  
  30.     function setTimer(today) {
  31.         var diffDate = new Date(0);
  32.         diffDate.setMilliseconds(launchDate - today);
  33.         return Math.floor(diffDate.valueOf() / 1000);
  34.     }
  35.  
  36.     function displayTimer(timer, sb_ststimer) {
  37.  
  38.         var string = document.getElementById("string_bundle");
  39.         today = new Date();
  40.  
  41.         var sbPanel = document.getElementById("sb_ststimer");
  42.         var panel = document.getElementById("sb_popup_panel");
  43.         var panelLabel = document.getElementById("sb_popup_panel_label");
  44.         if (timer == 9*60) {
  45.             panelLabel.value = string.getString("finalSequence");
  46.             panel.openPopup(sbPanel, "before_start", 0, 0, false);
  47.         }
  48.         if (timer == 31) {
  49.             panelLabel.value = string.getString("autoSequence");
  50.             panel.openPopup(sbPanel, "before_start", 0, 0, false);
  51.         }
  52.         if (timer == 0) {
  53.             panelLabel.value = string.getString("liftoff");
  54.             panel.openPopup(sbPanel, "before_start", 0, 0, false);
  55.         }
  56.         if (timer == -520) {
  57.             panelLabel.value = string.getString("MECO");
  58.             panel.openPopup(sbPanel, "before_start", 0, 0, false);
  59.         }
  60.         if (timer == (launchDate - orbitInsertion) / 1000) {
  61.             panelLabel.value = string.getString("orbit");
  62.             panel.openPopup(sbPanel, "before_start", 0, 0, false);
  63.         }
  64.         if (timer == (launchDate - deorbitIgnition) / 1000) {
  65.             panelLabel.value = string.getString("deorbit");
  66.             panel.openPopup(sbPanel, "before_start", 0, 0, false);
  67.         }
  68.         if (timer == (launchDate - landingDate) / 1000) {
  69.             panelLabel.value = string.getString("landing");
  70.             panel.openPopup(sbPanel, "before_start", 0, 0, false);
  71.         }
  72.         if (panel.state == "open") {
  73.             panelOpenTime += 1;
  74.             if (panelOpenTime == 10) {
  75.                 panel.hidePopup();
  76.                 panelOpenTime = 0;
  77.             }
  78.         }
  79.  
  80.         if (timer <= 9*60) sbPanel.style.fontWeight = "bolder";
  81.         if (timer <= 31) sbPanel.style.color = "red";
  82.         if (timer <= -520) sbPanel.style.color = "";
  83.         if (timer <= (launchDate - orbitInsertion) / 1000) sbPanel.style.fontWeight = "";
  84.         if (timer <= (launchDate - deorbitIgnition) / 1000) sbPanel.style.fontWeight = "bolder";
  85.         if (timer <= (launchDate - landingDate) / 1000) sbPanel.style.fontWeight = "";
  86.         if (timer == (launchDate - newCountdownDate) / 1000) ststimer.onLoad().worker.postMessage("");
  87.  
  88.         var secs = timer % 60;
  89.         var countdown1 = (timer - secs) / 60;
  90.         var mins = countdown1 % 60;
  91.         var countdown2 = (countdown1 - mins) / 60;
  92.         var hours = countdown2 % 24;
  93.         var days = (countdown2 - hours) / 24;
  94.         if (timer < 0) {
  95.             if (landingDate < today) document.getElementById(sb_ststimer).label = missionName + string.getString("missionEnd");
  96.             else {
  97.                 if (ststimer.sb_mode == 0) document.getElementById(sb_ststimer).label = missionName + "+ " + Math.abs(days) + " " + (Math.abs(days) == 1 ? string.getString("day") : string.getString("days")) + " : " + (Math.abs(hours) < 10 ? "0" + Math.abs(hours) : Math.abs(hours)) + " : " + (Math.abs(mins) < 10 ? "0" + Math.abs(mins) : Math.abs(mins)) + " : " + (Math.abs(secs) < 10 ? "0" + Math.abs(secs) : Math.abs(secs));
  98.                 if (ststimer.sb_mode == 1) document.getElementById(sb_ststimer).label = missionName + "+ " + Math.abs(days) + "d : " + Math.abs(hours) + "h : " + Math.abs(mins) + "m : " + Math.abs(secs) + "s";
  99.                 if (ststimer.sb_mode == 2) {
  100.                     if (days == 0) document.getElementById(sb_ststimer).label = missionName + "+ " + (Math.abs(hours) < 10 ? "0" + Math.abs(hours) : Math.abs(hours)) + " : " + (Math.abs(mins) < 10 ? "0" + Math.abs(mins) : Math.abs(mins)) + " : " + (Math.abs(secs) < 10 ? "0" + Math.abs(secs) : Math.abs(secs));
  101.                     else document.getElementById(sb_ststimer).label = missionName + "+ " + Math.abs(days) + " " + (Math.abs(days) == 1 ? string.getString("day") : string.getString("days"));
  102.                 }
  103.                 if (ststimer.sb_mode == 3) document.getElementById(sb_ststimer).label = missionName + "+ " + Math.abs(days) + " " + (Math.abs(days) == 1 ? string.getString("day") : string.getString("days"));
  104.             }
  105.         }
  106.         else {
  107.             if (missionNumber != 0) {
  108.                 if (ststimer.sb_mode == 0) document.getElementById(sb_ststimer).label = missionName + "- " + days + " " + (days == 1 ? string.getString("day") : string.getString("days")) + " : " + (hours < 10 ? "0" + hours : hours) + " : " + (mins < 10 ? "0" + mins : mins) + " : " + (secs < 10 ? "0" + secs : secs);
  109.                 if (ststimer.sb_mode == 1) document.getElementById(sb_ststimer).label = missionName + "- " + days + "d : " + hours + "h : " + mins + "m : " + secs + "s";
  110.                 if (ststimer.sb_mode == 2) {
  111.                     if (days == 0) document.getElementById(sb_ststimer).label = missionName + "- " + (hours < 10 ? "0" + hours : hours) + " : " + (mins < 10 ? "0" + mins : mins) + " : " + (secs < 10 ? "0" + secs : secs);
  112.                     else document.getElementById(sb_ststimer).label = missionName + "- " + days + " " + (days == 1 ? string.getString("day") : string.getString("days"));
  113.                 }
  114.                 if (ststimer.sb_mode == 3) document.getElementById(sb_ststimer).label = missionName + "- " + days + " " + (days == 1 ? string.getString("day") : string.getString("days"));
  115.             }
  116.             else document.getElementById(sb_ststimer).label = missionName + string.getString("stsEnd");
  117.         }
  118.  
  119.     }
  120.  
  121.     return {
  122.  
  123.         personas : null,
  124.         isThemeSelected : null,
  125.         prefs : null,
  126.         sb_icon : null,
  127.         sb_name : null,
  128.         sb_mode : null,
  129.  
  130.         onLoad : function() {
  131.  
  132.             this.personas = Components.classes["@mozilla.org/preferences-service;1"]
  133.                 .getService(Components.interfaces.nsIPrefService)
  134.                 .getBranch("lightweightThemes.");
  135.             this.personas.QueryInterface(Components.interfaces.nsIPrefBranch2);
  136.             this.personas.addObserver("", this, false);
  137.             try {
  138.                 this.isThemeSelected = this.personas.getBoolPref("isThemeSelected")
  139.             }
  140.             catch(e){
  141.                 this.isThemeSelected = false
  142.             }
  143.             this.blackLabels();
  144.  
  145.             this.prefs = Components.classes["@mozilla.org/preferences-service;1"]
  146.                 .getService(Components.interfaces.nsIPrefService)
  147.                 .getBranch("ststimer.");
  148.             this.prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);
  149.             this.prefs.addObserver("", this, false);
  150.             this.sb_icon = this.prefs.getBoolPref("sb_icon");
  151.             this.sb_name = this.prefs.getBoolPref("sb_name");
  152.             this.sb_mode = this.prefs.getIntPref("sb_mode");
  153.  
  154.             var self = this;
  155.             var worker = new Worker("chrome://ststimer/content/data.js");
  156.             worker.onmessage = function(event) {
  157.                 var row = event.data.split("\n");
  158.                 orbitInsertion = new Date(row[4]);
  159.                 orbitInsertion.setHours(orbitInsertion.getHours() - today.getTimezoneOffset()/60);
  160.                 deorbitIgnition = new Date(row[5]);
  161.                 deorbitIgnition.setHours(deorbitIgnition.getHours() - today.getTimezoneOffset()/60);
  162.                 landingDate = new Date(row[6]);
  163.                 landingDate.setHours(landingDate.getHours() - today.getTimezoneOffset()/60);
  164.                 newCountdownDate = new Date(landingDate);
  165.                 newCountdownDate.setDate(newCountdownDate.getDate() + 3);
  166.                 if (newCountdownDate > today) {
  167.                     missionNumber = row[0];
  168.                     issAssemblyFlight = row[1];
  169.                     orbiter = row[2];
  170.                     launchDate = new Date(row[3]);
  171.                     nextMissionNumber = row[7];
  172.                     nextIssAssemblyFlight = row[8];
  173.                     nextOrbiter = row[9];
  174.                 }
  175.                 else {
  176.                     missionNumber = row[7];
  177.                     issAssemblyFlight = row[8];
  178.                     orbiter = row[9];
  179.                     launchDate = new Date(row[10]);
  180.                 }
  181.                 launchDate.setHours(launchDate.getHours() - today.getTimezoneOffset()/60);
  182.                 self.showIcon();
  183.                 self.showName();
  184.                 self.changeMode();
  185.                 setInterval(startTimer, 1000);
  186.             };
  187.             worker.postMessage("");
  188.  
  189.         },
  190.  
  191.         onUnload : function() {
  192.  
  193.             if(!this.personas) return;
  194.             this.personas.removeObserver("", this);
  195.  
  196.             if(!this.prefs) return;
  197.             this.prefs.removeObserver("", this);
  198.  
  199.         },
  200.  
  201.         observe : function(aSubject, aTopic, aData) {
  202.             if(aTopic != "nsPref:changed") return;
  203.             switch (aData) {
  204.  
  205.                 case "isThemeSelected" :
  206.                     this.isThemeSelected = this.personas.getBoolPref("isThemeSelected");
  207.                     this.blackLabels();
  208.                 break;
  209.  
  210.                 case "sb_icon" :
  211.                     this.sb_icon = this.prefs.getBoolPref("sb_icon");
  212.                     this.showIcon();
  213.                 break;
  214.  
  215.                 case "sb_name" :
  216.                     this.sb_name = this.prefs.getBoolPref("sb_name");
  217.                     this.showName();
  218.                 break;
  219.  
  220.                 case "sb_mode" :
  221.                     this.sb_mode = this.prefs.getIntPref("sb_mode");
  222.                     this.changeMode();
  223.                 break;
  224.  
  225.             }
  226.         },
  227.  
  228.         showIcon : function() {
  229.             if (this.sb_icon == true) {
  230.                 if (missionNumber != 0) document.getElementById("sb_ststimer").src = "http://max91ao.altervista.org/ststimer/mission/" + missionNumber + ".png";
  231.                 else document.getElementById("sb_ststimer").src = "http://max91ao.altervista.org/ststimer/mission/sts.png"
  232.             }
  233.             else document.getElementById("sb_ststimer").src = "";
  234.         },
  235.  
  236.         showName : function() {
  237.             if (this.sb_name == true) {
  238.                 if (missionNumber != 0) missionName = "<STS-" + missionNumber + "> ";
  239.                 else missionName = "<STS> ";
  240.             }
  241.             else missionName = "";
  242.             if (missionNumber != null) startTimer();
  243.         },
  244.  
  245.         changeMode : function() {
  246.             var centralClick_group = document.getElementById("sb_popup_centralClick_group");
  247.             if (this.sb_mode == 0) centralClick_group.selectedIndex = 0;
  248.             if (this.sb_mode == 1) centralClick_group.selectedIndex = 1;
  249.             if (this.sb_mode == 2) centralClick_group.selectedIndex = 2;
  250.             if (this.sb_mode == 3) centralClick_group.selectedIndex = 3;
  251.             if (missionNumber != null) startTimer();
  252.         },
  253.  
  254.         blackLabels : function(){
  255.             if (this.isThemeSelected == true) {
  256.                 document.getElementById("sb_popup_centralClick_group").style.color = "black";
  257.                 document.getElementById("sb_popup_leftClick").style.color = "black";
  258.                 document.getElementById("sb_popup_leftClick_stsEnd").style.color = "black";
  259.                 document.getElementById("sb_popup_panel").style.color = "black";
  260.             }
  261.             else {
  262.                 document.getElementById("sb_popup_centralClick_group").style.color = "";
  263.                 document.getElementById("sb_popup_leftClick").style.color = "";
  264.                 document.getElementById("sb_popup_leftClick_stsEnd").style.color = "";
  265.                 document.getElementById("sb_popup_panel").style.color = "";
  266.             }
  267.         },
  268.  
  269.         onClick : function(event) {
  270.  
  271.             var sbPanel = document.getElementById("sb_ststimer");
  272.             var string = document.getElementById("string_bundle");
  273.             var leftClick = document.getElementById("sb_popup_leftClick");
  274.             var leftClick_label1 = document.getElementById("sb_popup_leftClick_label1");
  275.             var leftClick_label2 = document.getElementById("sb_popup_leftClick_label2");
  276.             var leftClick_label3 = document.getElementById("sb_popup_leftClick_label3");
  277.             var leftClick_label4 = document.getElementById("sb_popup_leftClick_label4");
  278.  
  279.             if (event.button == 0) {
  280.                 if (missionNumber != 0) {
  281.                     if (launchDate > today) {
  282.                         leftClick_label1.value = string.getString("mission") + " STS-" + missionNumber;
  283.                         leftClick_label2.value = string.getString("issAssemblyFlight") + " " + issAssemblyFlight;
  284.                         leftClick_label3.value = string.getString("orbiter") + " " + orbiter;
  285.                         leftClick_label4.value = string.getString("launchString") + " " + launchDate.toLocaleString();
  286.                         leftClick.openPopup(sbPanel, "before_start", 0, 0, false);
  287.                     }
  288.                     else {
  289.                         if (landingDate < today) {
  290.                             if (nextMissionNumber != 0) {
  291.                                 leftClick_label1.value = string.getString("nextMission") + " STS-" + nextMissionNumber;
  292.                                 leftClick_label2.value = string.getString("issAssemblyFlight") + " " + nextIssAssemblyFlight;
  293.                                 leftClick_label3.value = string.getString("orbiter") + " " + nextOrbiter;
  294.                                 leftClick_label4.value = string.getString("startCountdown") + " " + newCountdownDate.toLocaleString();
  295.                                 leftClick.openPopup(sbPanel, "before_start", 0, 0, false);
  296.                             }
  297.                             else document.getElementById("sb_popup_leftClick_stsEnd").openPopup(sbPanel, "before_start", 0, 0, false);
  298.                         }
  299.                         else {
  300.                             leftClick_label1.value = string.getString("mission") + " STS-" + missionNumber;
  301.                             leftClick_label2.value = string.getString("issAssemblyFlight") + " " + issAssemblyFlight;
  302.                             leftClick_label3.value = string.getString("orbiter") + " " + orbiter;
  303.                             leftClick_label4.value = string.getString("landingString") + " " + landingDate.toLocaleString();
  304.                             leftClick.openPopup(sbPanel, "before_start", 0, 0, false);
  305.                         }
  306.                     }
  307.                 }
  308.                 else document.getElementById("sb_popup_leftClick_stsEnd").openPopup(sbPanel, "before_start", 0, 0, false);
  309.             }
  310.             if (event.button == 1) document.getElementById("sb_popup_centralClick").openPopup(sbPanel, "before_start", 0, 0, true);
  311.             if (event.button == 2) document.getElementById("sb_popup_rightClick").openPopup(sbPanel, "before_start", 0, 0, true);
  312.  
  313.         }
  314.  
  315.     };
  316.  
  317. }();
  318.  
  319. window.addEventListener("load", function(e) { ststimer.onLoad(); }, false);
  320. window.addEventListener("unload", function(e) { ststimer.onUnload(); }, false);